
首先，请理解一个概念，我们在shell中经常用于输入命令的一个行，其实就是一个行编辑器，也称为命令行编辑器。

命令行编辑器允许用户使用特定的文本编辑器（vi或emacs)来编辑当前命令行或命令历史文件中的任何命令。

bash shell默认使用基于emacs文本编辑器的命令行编辑，而我暂时却只熟悉vi编辑器，那么就可以把bash的命令行编辑改为vi模式。

选用vi风格的编辑器：
\begin{shaded}
\begin{verbatim}
$ set -o vi	  #注：此处不能用vim来代替vi
\end{verbatim}
\end{shaded}

选用emacs风格的编辑器：（bash默认的命令行编辑风格）
\begin{shaded}
\begin{verbatim}
$ set -o emacs
\end{verbatim}
\end{shaded}

因为命令行编辑功能非常有用，可把上述设置添加到.bashrc中去,这样就可以每次在启动bash的时候，都仍能用你最习惯的风格了。

那么，设置成vi的风格后，和原来有什么区别呢？

1、基本上在vi中能对一行（或部分）进行操作的命令，在些行编辑器中，仍然能用。

比如：命令行的查找功能。
\begin{shaded}
\begin{verbatim}
$ ESC(按键）/linux1x     	#查找命令历史中最近一个包含字符串linux1x的命令，为了找出更早的一个包含指定字符串的命令，输入“n“重复执行这一检索过程。
\end{verbatim}
\end{shaded}

2、注意：vi命令行编辑器开始时处于输入模式，为了使用vi命令，必须按下ESC键，进入命令模式。

3、下面是使用vi风格和emacs风格的对比：
\begin{table}[H]
  \centering
  \begin{tabular}{|c|c|c|}
    \hline
    光标移动命令 & vi & emacs \\
    \hline
    光标左移一个字符 & h & Ctrl-b \\
    \hline
    光标右移一个字符 & l & Ctrl-f \\
    \hline
    光标左移一个字 & b & ALT-b \\
    \hline
    光标右移一个字 & w & ALT-f \\
    \hline
    把光标移至行首 & \^ & Ctrl-a \\
    \hline
    把光标移至行尾 & \$ & Ctrl-e \\
    \hline
    上一条历史记录 & k & Ctrl-p \\
    \hline
    下一条历史记录 & l & Ctrl-n \\
    \hline
  \end{tabular}
\end{table}
\begin{table}[H]
  \centering
  \begin{tabular}{|c|c|c|}
    \hline
    编辑命令 & vi & emacs \\
    \hline
    删除当前字符 & x & Ctrl-d \\
    \hline
    删除当前字 & dw & ALT-d \\
    \hline
    删除一行 & dd & Ctrl-a Ctrl-k\\ 
    \hline
    修改一个字 & cw & \\
    \hline
    附加文本 & a & \\
    \hline
    插入文本 & i & \\
    \hline
  \end{tabular}
\end{table}

\begin{flushright}
  \hyperref[content]{回到目录}
\end{flushright}